1. Field of the Invention
The present invention relates generally to computer systems, and more particularly but not exclusively to file systems and storage devices.
2. Description of the Background Art
Storage devices are employed to store data that are accessed by computer systems. Examples of storage devices include volatile and non-volatile memory, floppy drives, hard disk drives, tape drives, optical drives, etc. A storage device may be locally attached to an input/output (I/O) channel of a computer. For example, a hard disk drive may be connected to a computer's disk controller. A storage device may also be accessible over a network. Examples of such a storage device include network attached storage (NAS) and storage area network (SAN) devices. A storage device may be a single stand-alone component or be comprised of a system of storage devices such as in the case of Redundant Array Of Inexpensive Disks (RAID) groups and some Direct Access Storage Devices (DASD).
For mission-critical applications requiring high availability of stored data, various techniques for enhancing data reliability are typically employed. One such technique is to provide a “mirror” for each storage device. In a mirror arrangement, data are written to at least two storage devices. Thus, data may be read from either of the two storage devices so long as the two devices are operational and contain the same data. That is, either of the two storage devices may process read requests so long as the two devices are in synchronization.
When one of the storage devices fails, its mirror may be used to continue processing read and write requests. However, this also means that the failing storage device will be out of synchronization with its mirror. To avoid losing data in the event the mirror also fails, it is desirable to resynchronize the two storage devices as soon as the failing storage device becomes operational. Unfortunately, prior techniques for resynchronizing mirrored storage devices take a long time and consume a relatively large amount of processing time and I/O bandwidth. These not only increase the probability of data loss, but also result in performance degradation.